package com.udistrisisbici.dao;

import com.udistrisisbici.exception.DaoException;
import com.udistrisisbici.vo.UsuarioVO;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

/**
 *
 * @author nicardonaa
 */
public class UsuarioDao extends UtilDao {

    public boolean insertarUsuario(UsuarioVO usuVO) throws DaoException, SQLException {

        Connection con = null;
        PreparedStatement ps = null;
        ResultSet rs = null;
        boolean respuesta = false;
        try {

            con = getConeccionSisbici();
            String sentenciaSql = "INSERT INTO public.usuario(num_identificacion, codigo_ud, nombres, apellidos, telefono) VALUES( ?, ?, ?, ?, ?)";
            ps = con.prepareStatement(sentenciaSql);

            ps.setString(1, usuVO.getNumIdentificacion());
            ps.setString(2, usuVO.getCodigoUD());
            ps.setString(3, usuVO.getNombres());
            ps.setString(4, usuVO.getApellidos());
            ps.setString(5, usuVO.getTelefono());
            rs = ps.executeQuery();
            respuesta = ps.execute();

        } catch (DaoException de) {
//            logger.error("fun:buscarCanalAfiliacionByCodCanal -> Error de conexión en la ejecuciópn del SQL", de);
            throw de;
        } catch (SQLException se) {
//            logger.error("fun:buscarCanalAfiliacionByCodCanal -> Error en la ejecución del SQL", se);
            throw se;
        } finally {
            closeResources(con, ps, rs);
        }

        return respuesta;
    }

    /**
     * Listo mamor creo que con eso ya por lo menos devuelve una lista con los resultados de la 
     * consulta, como estamos consultando por id solo devuelve uno, pero por ejemplo cundo consultemos por nombre y no por id va 
     * a devolver más de un resultado, en algunos casos, amo...yo a ti mi cielo pero por que quedo con error
     * cual?? al desplegar?????
     * @param usuVO
     * @return
     * @throws DaoException
     * @throws SQLException 
     */
    public List<UsuarioVO> buscarUsuario(UsuarioVO usuVO) throws DaoException, SQLException {

        Connection con = null;
        PreparedStatement ps = null;
        ResultSet rs = null;
        List<UsuarioVO> usus = new ArrayList<UsuarioVO>();

        try {
            con = getConeccionSisbici();
            StringBuilder sql = new StringBuilder();
            /// AHHHH FALTABA ESPACIO AL FINALIZAR LA PRIMERA LINEA DE QUERY
            sql.append("SELECT num_identificacion, codigo_ud, nombres, apellidos, telefono ");
            sql.append("FROM public.usuario ");
            sql.append("where num_identificacion is not null ");
            
            
            if (usuVO.getNumIdentificacion() != null && !usuVO.getNumIdentificacion().equals("")) {
                sql.append("and num_identificacion = ? ");
            }
            if (usuVO.getCodigoUD() != null && !usuVO.getCodigoUD().equals("")) {
                sql.append("and codigo_ud = ? ");
            }
            if (usuVO.getNombres() != null && !usuVO.getNombres().equals("")) {
                sql.append("and nombres = ? ");
            }
            if (usuVO.getApellidos() != null && !usuVO.getApellidos().equals("")) {
                sql.append("and apellidos = ? ");
            }

            ps = con.prepareStatement(sql.toString());
            int i = 1;

            if (usuVO.getNumIdentificacion() != null && !usuVO.getNumIdentificacion().equals("")) {
                ps.setString(i++, usuVO.getNumIdentificacion());
            }
            if (usuVO.getCodigoUD() != null && !usuVO.getCodigoUD().equals("")) {
                ps.setString(i++, usuVO.getCodigoUD());
            }
            if (usuVO.getNombres() != null && !usuVO.getNombres().equals("")) {
                ps.setString(i++, usuVO.getNombres());
            }

            if (usuVO.getApellidos() != null && !usuVO.getApellidos().equals("")) {
                ps.setString(i++, usuVO.getApellidos());
            }

            rs = ps.executeQuery();

            UsuarioVO item;
            while (rs.next()) {
                item  = new UsuarioVO();
                item.setNumIdentificacion(rs.getString(1));
                item.setCodigoUD(rs.getString(2));
                item.setNombres(rs.getString(3));
                item.setApellidos(rs.getString(4));
                item.setTelefono(rs.getString(5));
                usus.add(item);
            }

        } catch (DaoException de) {
//            logger.error("fun:buscarCanalAfiliacionByCodCanal -> Error de conexión en la ejecuciópn del SQL", de);
            throw de;
        } catch (SQLException se) {
//            logger.error("fun:buscarCanalAfiliacionByCodCanal -> Error en la ejecución del SQL", se);
            throw se;
        } finally {
            closeResources(con, ps, rs);
        }

        return usus;
    }

}
